查看原文
其他

看完助你拿Offer

JavaGuide 2020-12-28

Editor's Note

本文来自读者投稿!希望对要大家有帮助,同时也欢迎各位投稿。丰厚奖励哦!

The following article is from bestsort的秘密基地 Author bestsort

2.24, 我获得了我春招开始投递简历以来的第一个 Offer 

先说一下故事背景~

笔者21双非二本本科, 在校期间参与过 ACM 但是成绩较差:省赛银,区域赛当炮灰(简历没写),B组C/C++蓝桥国二(因为竞赛成绩差所以就只有用蓝桥充数了~其实大厂一般不会看蓝桥成绩的),去年9-11月花两个月时间写了个Demo(只写了一半不到吧,因为有很多功能其实都没写,这个在项目README里能看到)。

到目前为止已经面试的有京东(上周末一面结束)、阿里(提前批CBU二面刚面完,ICBU一面凉)、字节(一面凉,这是第一次参加的面试,体验极差~)

这里我试着总结一下我自己在面试过程中所遇见的问题和思考吧

如果需要进入CVTE(目前我只拿到了这个Offer,所以只能用这个举例,而且我是实习,校招这种会更难一点点)这样的公司的话大致需要以下几点(下面列出的大概有六分之一我面试的时候也不会~)

原始知识积累

这里指的原始知识是一些常见的概念。比如我要应聘web后端研发,那么需要知道的应该有以下知识:

  • MySQL(事务、索引、存储引擎)
  • Java基础(常用的集合类、JVM、Java基础语法、并发编程)
  • 常用的中间件(Redis)
  • 计算机网络(TCP/IP、HTTP等)
  • 一点点项目经验

以上所有点,都基本需要保证自己能够针对某一点不间断的描述20分钟左右干货(比如MySQL的事务就可以算做一点)。这里总结一下上面知识问的比较高频的部分

MySQL

  • 事务
    • 事务特性(ACID)
    • 事务的隔离级别(读未提交、读已提交、不可重复读、序列化)
    • 分别能解决哪些问题(脏读、不可重复读、幻读丢失修改)
    • MVCC(多版本并发控制)
    • 事务的回滚(undoredo日志)
  • 索引
    • 索引有哪几种
    • 索引的底层实现,b+树和红黑树的比较、和b树的比较
    • 索引失效
    • 索引优化策略
    • explain慢查询优化
  • 存储引擎
    • MyISAM 和 InnoDB 的区别
    • 两者之间索引结构的区别
    • 各自的使用场景
  • 锁(共享锁、排他锁、行锁、表锁、间隙锁)
  • SQL语句(常见聚类函数的使用、表连接查询)

Java基础

  • 集合类
    • HashMap 和 ConcurrentHashMap(基本上是场场必问,需要了解源码)
    • ArrayList、LinkedList、TreeMap、LinkedHashMap、HashSet等需要了解底层数据结构和各容器之间的优劣势
    • HashMap 和 ConcurrentHashMap在JDK不同版本的改动以及原因(JDK1.7、JDK1.8)
  • 常见基础(这个很多,可以参考其他面经,我这里只提几个比较经典的)
    • String为什么不可变
    • String、StringBuilder、StringBuffer的对比
    • 接口和抽象类的区别
    • 单例模式(几种实现方式的区别最好具体了解下,因为从这里可以问到JVM中的内存结构和JVM对于多线程的一些处理策略)
  • JVM(较重要)
    • 类加载机制
    • 常见GC算法
    • JVM内存模型
    • JVM运行时内存区域
    • 常见垃圾收集器(主要是CMS、G1,知道ZGC并且能说出原理是加分项)
    • 常见的启动参数
    • JVM内存溢出的分析过程
    • 锁(主要是synchrizedvolatile这两个关键字在JVM中执行的行为)
  • 并发编程
    • 创建线程的几种方式
    • 线程池原理以及参数含义
    • 死锁产生条件以及解决策略
    • J.U.C下部分类源码阅读
    • Lock接口下实现的锁和synchrized关键字的比较, 还有各自的优缺点
    • AQS(抽象队列同步器)

Redis(一般是结合项目问)

  • 常见用途
  • 底层数据结构(SDS、字典、跳跃表、链表、压缩数组、整数列表这几个都需要了解)
  • RDB 和 AOF 两种不同备份方式的比较以及优缺点(从各自原理、性能、稳定性答)
  • 跳表和红黑树之间的比较(从插入效率、实现方式、内存消耗以及特殊条件查询几方面进行比较)
  • SDS和原始字符串的比较(从缓冲区溢出、扩容方面答)
  • 字典和HashMap的比较(扩容方式、扩容大小)

计算机网络

  • TCP(需要深入了解)
    • TCP头部(大概知道头部能够传递哪些信息,常用的部分需要记住占据了多少bit)
    • 三次握手四次挥手(具体到两端之间的状态)
    • 每一次握手挥手失败的处理
    • 拥塞控制(慢开始,快重传、拥塞避免、快恢复)
    • 流量控制(零窗口的含义、接受窗口的协商)
    • Nagle(糊涂窗口综合症)
    • 常见的攻击(SYN泛洪攻击、DDoS)
  • HTTP
    • Get 和 Post 的比较
    • Session 和 Cookie 的比较
    • 常用的 HTTP 头部
    • 常用的 HTTP 状态码
    • HTTP1.0、1.1、2.0三个版本各自的特性
    • HTTPS中的SSL握手过程
    • 常见的攻击(CSRF、XSS)

简历

首先简历是非常非常重要的,作为技术岗, 简历上跟技术无关的东西要一笔带过, 同时不推荐写学生会相关经历, 因为面试过程中有一面是你入职后的直属leader担任面试官,而且对学生会经历不看好的比看好的人多。简历中可多列举技术点,比如写了熟悉Java基础,最好写上能够证明的东西,比如熟悉Spring框架,曾深入剖析过Spring-Core源码这样子。不要干瘪瘪的只写个熟悉MySQL上,这样会让面试官很难发挥,只能天南海北的问。如果撞到你会的点上最好,如果没撞上亏的是自己。我这里也可以给大家做简历参考,信得过我的话可以把简历发送至me@bestsort.show,当然我也只是根据我的经验提出相应的建议,不一定全部正确。

个人博客且内容比较充实的的可以将博客地址放在明显位置,加分的~

交流

在面试过程中,很重要的一点就是和面试官的交流了,如何去把一个事物在几乎没有准备的情况下清晰地描述出来(描述的时候不支支吾吾,一句话内不要大量出现然后就是emmm这样的词汇), 如果碰见不会的,千万千万不要口胡, 技术面的面试官一般来说只要问了你这个问题,就说明他是知道答案的,随意信口开河的话给人的观感很差。要知道每一轮面试表现都会记录,Offer的发放是根据几轮面试情况综合考评的。如果不清楚这一方面的知识的话,直接给面试官说明即可

项目

项目是非常重要的,我在投递阿里提前批的时候面试官就建议我们:项目经验哪怕是拿课设改改都行,千万别空着,包括打ACM的同学也是。 当然,项目最好不是Demo不是商城/秒杀。商城、秒杀可能是很多人都会跟着视频做的一个项目,但是面试官见过的肯定比你多的多,如果你是面试官,遇到了一群抄一样答案的你会怎么办?而且个人商城、秒杀这一类项目有一个巨大的缺点:没法落地。没法落地就代表这个项目没经过实际环境的考验,而没落地的项目对大厂而言其实本质上和Demo没太大区别,都是Demo,为啥不做一个其他比较稀有的东西呢?自己凭能力去写一个简陋的web server,绝对能秒杀商城、秒杀这一类。

如果有项目的话,面试官一般都会结合项目问问题,一般比较常问的有

  • 项目的架构(总览全局的能力)
  • 项目中遇到的困难(考察技术水平和实践能力)
  • 项目中对于某些问题的想法(考察思考问题的方式以及是否全面)
  • 某些实际问题的分析(最常见的就是项目中遇见的OOM怎么去排查)


文章推荐



 13 个最火的 SpringBoot 实战 开源项目推荐!总有一个适合你!
 5分钟带你体验一把 Kafka
 Guide哥从毕业到入职半年的感受!工作之后我学到了什么?
 强烈推荐!Github 顶级 Java 教程类开源项目推荐!
 入门篇!大白话带你认识 Kafka!



武汉加油!中国加油! 


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存